<!--
 * @Description: 
 * @version: 
 * @Author: 尹鹏孝
 * @Date: 2022-01-20 10:10:54
 * @LastEditors: 尹鹏孝
 * @LastEditTime: 2022-01-20 10:22:18
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>求两数之和</title>
</head>

<body>

    <!-- 给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
    你可以假设每种输入只会对应一个答案。但是，数组中同一个元素不能使用两遍。
    思路：
    本题，则要使用map，那么来看一下使用数组和set来做哈希法的局限。
    数组的大小是受限制的，而且如果元素很少，而哈希值太大会造成内存空间的浪费。
    set是一个集合，里面放的元素只能是一个key，而两数之和这道题目，不仅要判断y是否存在而且还要记录y的下标位置，因为要返回x 和 y的下标。所以set 也不能用。
    此时就要选择另一种数据结构：map ，map是一种key value的存储结构，可以用key保存数值，用value在保存数值所在的下标。

    nums = [2, 7, 11, 15], target = 9
    因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]
    -->
    <script>
        var twoSum = function (num, target) {
            let hash = {};
            for (let i = 0; i < num.length; i++) {
                if (hash[target - num[i]] !== undefined) {
                    return [i, hash[target - num[i]]]
                }
                hash[num[i]] = i;
            }
            return [];
        }


    </script>
</body>

</html>